home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-05 / netpq.zip / GETDATA.C < prev    next >
Text File  |  1992-02-24  |  6KB  |  196 lines

  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. #include "nos.h"
  5. #include "noslib.h"
  6. #include "netpq.h"
  7.  
  8. extern struct serverdef *server;
  9. extern struct localqueuedef *localqueue;
  10.  
  11. extern int currentserver, adaptornum, numberoflogins, currentprinter, found;
  12. extern int queuejobcount, printjobcount;
  13. extern int maxlocalqueuecount, localqueuecount;
  14.  
  15. extern struct PS serverps;
  16. extern struct queue_entry serverqe;
  17. extern struct time_block servertime;
  18. extern struct user_account serveraccount;
  19.  
  20. int statusorder [] =
  21.     {
  22.     8,                    //"FREE",
  23.     3,                    //"UPDATING",
  24.     4,                    //"HOLDING",
  25.     2,                    //"WAITING",
  26.     0,                    //"DESPOOLING",
  27.     5,                    //"CANCELLED",
  28.     6,                    //"FILE ERROR",
  29.     7,                    //"SPOOL ERROR",
  30.     1                    //"* RUSH *"
  31.     };
  32.  
  33.  
  34.  
  35.  
  36. getserverinfo ()
  37. {
  38.     //    Loop through each server that the user is logged into
  39.  
  40.     purgelocalqueue ();
  41.  
  42.     currentserver = 0;
  43.     localqueuecount = 0;
  44.  
  45.     while (currentserver < numberoflogins)
  46.     {
  47.     //  Record the Server's Date & Time
  48.  
  49.     if (NOSGetTime (&servertime, server [currentserver] .servername) == -1)
  50.         NOSperror ("NOSGetTime");
  51.     else
  52.         server [currentserver] .time = servertime;
  53.  
  54.     //  Loop through each of the 5 possible printers on the server
  55.     //  and record status of printer
  56.  
  57.     currentprinter = 0;
  58.     while (currentprinter < 5)
  59.         {
  60.         if (NOSGetStatus (¤tprinter, &serverps, server [currentserver] .servername) == -1)
  61.         NOSperror ("NOSGetStatus");
  62.         fixstatus ();
  63.         server [currentserver] .PS_state_pause [currentprinter - 1] = serverps .PS_state.PS_state_pause;
  64.         server [currentserver] .PS_state_value [currentprinter - 1] = serverps .PS_state.PS_state_value;
  65.         server [currentserver] .PS_index [currentprinter - 1] = serverps .PS_index;
  66.         server [currentserver] .PS_CPS [currentprinter - 1] = serverps .PS_CPS;
  67.         server [currentserver] .PS_output_chars [currentprinter - 1] = serverps .PS_output_chars;
  68.         }
  69.     currentserver++;
  70.     }
  71.  
  72.     qsort ( (void *) server, numberoflogins, sizeof (struct serverdef), comparestring);
  73.  
  74.     currentserver = 0;
  75.     localqueuecount = 0;
  76.  
  77.     while (currentserver < numberoflogins)
  78.     {
  79.     //    Check queue for presence of printer files in the server queue
  80.  
  81.     queuejobcount = 0;
  82.     printjobcount = 0;
  83.  
  84.     while (NOSGetQueue (&queuejobcount, &serverqe, server [currentserver] .servername) != -1)
  85.         {
  86.         if (serverqe .QE_type == QE_type_print)
  87.         {
  88.         if (localqueuecount >= maxlocalqueuecount)
  89.             {
  90.             if ( (localqueue = (struct localqueuedef *) realloc (localqueue, numberoflogins, sizeof (struct localqueuedef)))
  91.                 ==    (struct localqueuedef *) 0)
  92.             {
  93.             printf ("Couldn't reallocate space\n");
  94.             exit (1);
  95.             }
  96.             maxlocalqueuecount++;
  97.             }
  98.  
  99.         //if present, copy information to localqueue
  100.  
  101.         localqueue [localqueuecount] .QE_sequence = serverqe .QE_sequence;
  102.         sprintf (localqueue [localqueuecount] .sequencestring, "%6lu\0", serverqe .QE_sequence);
  103.  
  104.         strcpy (localqueue [localqueuecount] .QE_user,          serverqe .QE_user);
  105.         strcpy (localqueue [localqueuecount] .QE_machine,     serverqe .QE_machine);
  106.         strcpy (localqueue [localqueuecount] .QE_destination, serverqe .QE_destination);
  107.         strcpy (localqueue [localqueuecount] .QE_comment,     serverqe .QE_comment);
  108.  
  109.         localqueue [localqueuecount] .QE_status = serverqe .QE_status;
  110.         localqueue [localqueuecount] .QE_size    = serverqe .QE_size;
  111.         localqueue [localqueuecount] .server    = currentserver;
  112.  
  113.         localqueue [localqueuecount] .sort_order = statusorder [serverqe .QE_status] * 100000 + serverqe .QE_sequence;
  114.  
  115.         localqueue [localqueuecount] .printer = -1;
  116.  
  117.         //if waiting or downloading, find out which printer it's on
  118.  
  119.         if (serverqe .QE_status == 4)
  120.             {
  121.             currentprinter = 0;
  122.             found = false;
  123.  
  124.             while ( (currentprinter < 5) && (found == false) )
  125.             {
  126.             if ( (server [currentserver] .PS_state_value [currentprinter] != 0) &&
  127.                  (server [currentserver] .PS_index [currentprinter] == (queuejobcount - 1) ) )
  128.                 {
  129.                 localqueue [localqueuecount] .printer = currentprinter;
  130.                 found = true;
  131.                 }
  132.             currentprinter++;
  133.             }
  134.             }
  135.         printjobcount++;
  136.         localqueuecount++;
  137.         }
  138.         }
  139.     server [currentserver] .queue_jobs = printjobcount;
  140.     currentserver++;
  141.     }
  142.     qsort ( (void *) localqueue, localqueuecount, sizeof (struct localqueuedef), compareDWORD);
  143.  
  144. }
  145.  
  146.  
  147.  
  148. purgelocalqueue ()
  149. {
  150. int i;
  151.  
  152.     for (i = 0; i < maxlocalqueuecount + 1; i++)
  153.     localqueue [i] .server = -1;
  154. }
  155.  
  156.  
  157.  
  158. fixstatus ()
  159. {
  160. //  this module fixes the apparent error in the information reported by
  161. //  the NOSGetStatus call.
  162. //
  163. // Printer     ACTUAL     ACTUAL        DESIRED     DESIRED
  164. // Status     PS_state_pause PS_state_value  PS_state_pause  PS_state_value
  165. //
  166. // Enabled      0x00         0x01         0x00        PS_state_multijob
  167. // Single Job      0x01         0x00         0x00        PS_state_single_job
  168. // Disabled      0x00         0x00         0x00        PS_disabled
  169. // Paused      0x00         0x41         0x01         0xXX
  170.  
  171.     if ( (serverps .PS_state.PS_state_pause == 0) &&
  172.      (serverps .PS_state.PS_state_value == 0x41) )
  173.     {
  174.     serverps .PS_state.PS_state_pause = 1;
  175.     serverps .PS_state.PS_state_value = 1;
  176.     }
  177.     else if ( (serverps .PS_state.PS_state_pause == 0) &&
  178.           (serverps .PS_state.PS_state_value == 0x01) )
  179.      {
  180.      serverps .PS_state.PS_state_pause = 0;
  181.      serverps .PS_state.PS_state_value = PS_state_multijob;
  182.      }
  183.     else if ( (serverps .PS_state.PS_state_pause == 1) &&
  184.           (serverps .PS_state.PS_state_value == 0) )
  185.      {
  186.      serverps .PS_state.PS_state_pause = 0;
  187.      serverps .PS_state.PS_state_value = PS_state_single_job;
  188.      }
  189.     else if ( (serverps .PS_state.PS_state_pause == 0) &&
  190.           (serverps .PS_state.PS_state_value == 0) )
  191.      {
  192.      serverps .PS_state.PS_state_pause = 0;
  193.      serverps .PS_state.PS_state_value = PS_state_disabled;
  194.      }
  195. }
  196.